﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace CityGames
{
    public partial class FormPromocionesGestion : Form
    {   
        static private Promocion promocion = new Promocion();
        static private Genero genero = new Genero();
        static private Plataforma plataforma = new Plataforma();

        private FormContenedor contenedor;
        private const int numeroDeJuegosPorPagina = 12;
        private int numeroDePaginaActual;
        private int numeroDePaginasMaximo;

        private DataSet dsPromociones;

        public FormPromocionesGestion()
        {
            InitializeComponent();
        }

        private void FormPromocionesGestion_Load(object sender, EventArgs e)
        {
            try
            {
                contenedor = (FormContenedor)MdiParent;
                dsPromociones = new DataSet();

                numeroDePaginaActual = 1;

                dtpFechaInicio.Value = promocion.ObtenerFechaMinima();
                dtpFechaFin.Value = promocion.ObtenerFechaMaxima();

                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bFiltrar_Click_1(object sender, EventArgs e)
        {
            try
            {
                rbTodos.Checked = true;
                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void MostrarTodos()
        {
            try
            {
                tbNombre.Text = "";
                tbNombre.Focus();
                dtpFechaInicio.Value = promocion.ObtenerFechaMinima();
                dtpFechaFin.Value = promocion.ObtenerFechaMaxima();

                numeroDePaginaActual = 1;

                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void CargarDataGridViewPromociones()
        {
            try
            {
                int tipo=0;
                
                if (rbTodos.Checked == true)
                    tipo = 0;
                
                if (rbPromocion1.Checked == true)
                    tipo = 1;

                if (rbPromocion2.Checked == true)                
                    tipo = 2;

                if (rbPromocion3.Checked == true)
                    tipo = 3;

                numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(promocion.ObtenerNumeroDePromocionesFiltradas(tbNombre.Text, tipo, dtpFechaInicio.Value, dtpFechaFin.Value).ToString()) / numeroDeJuegosPorPagina).ToString());

                if (numeroDePaginaActual == 0)
                    numeroDePaginaActual = 1;

                if (numeroDePaginaActual > numeroDePaginasMaximo)
                    numeroDePaginaActual = numeroDePaginasMaximo;

                dsPromociones = promocion.ObtenerPromocionesFiltradas(tbNombre.Text, tipo, dtpFechaInicio.Value, dtpFechaFin.Value, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                dgvPromociones.DataSource = dsPromociones;
                dgvPromociones.DataMember = "PromocionesFiltradas";
                dgvPromociones.Columns["CodigoPromocion"].Visible = false;
                lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();

                if (numeroDePaginaActual <= 1)
                {
                    bDGVPaginaAnterior.Enabled = false;
                    bDGVPrimeraPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaAnterior.Enabled = true;
                    bDGVPrimeraPagina.Enabled = true;
                }

                if (numeroDePaginaActual == numeroDePaginasMaximo)
                {
                    bDGVPaginaSiguiente.Enabled = false;
                    bDGVUltimaPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaSiguiente.Enabled = true;
                    bDGVUltimaPagina.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tbNombre_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtpFechaInicio_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtpFechaFin_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cbPlataforma_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cbGenero_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewPromociones();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewPromociones();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public bool ActualizarPromociones()
        {
            bool resultado = false;

            try
            {
                int tipo = 0;

                if (rbTodos.Checked == true)
                    tipo = 0;

                if (rbPromocion1.Checked == true)
                    tipo = 1;

                if (rbPromocion2.Checked == true)
                    tipo = 2;

                if (rbPromocion3.Checked == true)
                    tipo = 3;

                resultado = promocion.ActualizarPromociones(dsPromociones, tbNombre.Text, tipo, dtpFechaInicio.Value, dtpFechaFin.Value, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return resultado;
        }

        private void bBorrar_Click(object sender, EventArgs e)
        {
            try
            {
                int promocionesEliminadas = 0;

                if (dgvPromociones.SelectedRows.Count > 0)
                {
                    if (MessageBox.Show("¿Realmente desea eliminar las promociones seleccionados?", "Confirmar eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        foreach (DataGridViewRow row in dgvPromociones.SelectedRows)
                        {
                            promocionesEliminadas++;
                            dsPromociones.Tables["PromocionesFiltradas"].Rows[row.Index].Delete();
                        }

                        if (ActualizarPromociones())
                        {
                            CargarDataGridViewPromociones();
                            MessageBox.Show(promocionesEliminadas.ToString() + " promocion(es) eliminada(s) correctamente.    ", "Eliminación exitosa.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            MessageBox.Show("Ocurrión un error durante la eliminación.    ", "Eliminación fallida.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar al menos una promocion.    ", "Seleccionar promocion para eliminar.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bEditar_Click(object sender, EventArgs e)
        {
            try
            {   
                if (dgvPromociones.SelectedRows.Count == 1)
                {
                    contenedor.hijoFormPromocionesAlta.ModificarDatos(dsPromociones.Tables["PromocionesFiltradas"].Rows[dgvPromociones.SelectedRows[0].Index]);
                    contenedor.hijoFormPromocionesAlta.Focus();
                }
                else
                {
                    MessageBox.Show("Debe seleccionar un juego.    ", "Seleccione un juego.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bMostrar_Click(object sender, EventArgs e)
        {
            try
            {
                if (contenedor.hijoFormPromocionesVisualizar.CargarDatosPromocion((int)dsPromociones.Tables[0].Rows[dgvPromociones.SelectedRows[0].Index]["CodigoPromocion"]))
                    contenedor.hijoFormPromocionesVisualizar.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbTodos_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbPromocion3_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtpFechaInicio_ValueChanged_1(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtpFechaFin_ValueChanged_1(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbPromocion2_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewPromociones();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvPromociones_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                if (dgvPromociones.SelectedRows.Count == 1)
                {
                    bEditar.Enabled = true;
                    bVisualizar.Enabled = true;
                }
                else
                {
                    bEditar.Enabled = false;
                    bVisualizar.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
